﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Propiedad;
using System.Data;

namespace UricaoWeb.Presentacion
{
	public partial class API_propiedades_AgregarHabitacion : API_Seguridad_Principal
	{
		protected void Page_Load(object sender, EventArgs e)
		{
            var master = Master as MasterPage;
            if (master != null)
            {
                master.actualizar_label();
            }
            base.validar_usuario();
			Session["idHotel"] = 1;
			capacidadHabitacion.Enabled = false;
		}


		private Boolean ValidarEstandarNumeroHabitacion()
		{
			int _longitudMaxima = 3;
			int _diferenciaLongitud = numeroHabitacion.Text.Length - _longitudMaxima;
			if (numeroHabitacion.Text.Length == _longitudMaxima)
			{
				return true;
			}
			else
			{
				if (numeroHabitacion.Text.Length < _longitudMaxima)
				{
					while (_diferenciaLongitud >= 0)
					{
						numeroHabitacion.Text = "0" + numeroHabitacion.Text;
						_diferenciaLongitud--;
					}
					return true;
				}
				if (numeroHabitacion.Text.Length > _longitudMaxima)
				{
					return false;
				}
			}

			return false;
		}

		private Boolean ValidarPisoEstablecidoExista(string _piso, string _idHotel)
		{
			LogicaPropiedades _validar = new LogicaPropiedades();

			return _validar.ValidarPisosHotel(_piso, _idHotel);
		}
		
		private void AsignarCapacidadHabitacionSegunTipo()
		{
			string _tipoHabitacion = listaTipoHabitaciones.SelectedValue.ToString();
			switch (_tipoHabitacion)
			{
				case "Familiar":
					capacidadHabitacion.Text = "4";
					break;
				case "Queen Room":
					capacidadHabitacion.Text = "2";
					break;
				case "King Room":
					capacidadHabitacion.Text = "2";
					break;
				case "Kids Suite":
					capacidadHabitacion.Text = "4";
					break;
				case "DoubleRoom":
					capacidadHabitacion.Text = "4";
					break;
				case "Simple":
					capacidadHabitacion.Text = "1";
					break;
				default:
					capacidadHabitacion.Text = "2";
					break;

			}
		}

		private Boolean ValidarCostoEsFloat(string _costo)
		{
			float _resultado = 0;
			if(float.TryParse(_costo, out _resultado))
			{
				return true;
			}
			return false;
		}
		
		protected void botonGuardar_Click(object sender, EventArgs e)
		{
			if (ValidarNumHabNoRepetido(numeroHabitacion.Text))
			{
				if (ValidarEstandarNumeroHabitacion() && ValidarPisoEstablecidoExista(TBpiso.Text, Session["idHotel"].ToString()) && ValidarCostoEsFloat(costoHabitacion.Text))
				{
					DataTable _datos = new DataTable();
					_datos.Columns.Add("numeroHabitacion", typeof(string));
					_datos.Columns.Add("pisoHabitacion", typeof(string));
					_datos.Columns.Add("capacidad", typeof(string));
					_datos.Columns.Add("costo", typeof(string));
					_datos.Columns.Add("descripcion", typeof(string));
					_datos.Columns.Add("disponibilidad", typeof(bool));
					_datos.Columns.Add("fkHotel", typeof(string));
					_datos.Columns.Add("tipoHabitacion", typeof(string));

					_datos.Rows.Add((numeroHabitacion.Text), (TBpiso.Text), (capacidadHabitacion.Text), (costoHabitacion.Text), descripcionHabitacion.Text, true, (Session["idHotel"].ToString()), listaTipoHabitaciones.SelectedValue.ToString());

					LogicaPropiedades _agregarFila = new LogicaPropiedades();
					if (_agregarFila.InsertarFilaHabitacion(_datos))
					{
						ResetearElementos();
						string _alerta = "alert('Habitacion creada Existosamente')";
						ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "AlertScript", _alerta, true);
					}
				}
				else
				{
					string _alerta = "alert('Compruebe que los valores introducidos sean correctos')";
					ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "AlertScript", _alerta, true);
				}
			}
			else
			{
				string _alerta = "alert('El numero de habitacion ya existe, cambie el numero.')";
				ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "alert", _alerta, true);
			}
		}

		protected void listaTipoHabitaciones_SelectedIndexChanged(object sender, EventArgs e)
		{
			AsignarCapacidadHabitacionSegunTipo();
		}

		private void ResetearElementos()
		{
			numeroHabitacion.Text = "";
			TBpiso.Text = "";
			descripcionHabitacion.Text = "";
			listaTipoHabitaciones.SelectedIndex = 0;
			capacidadHabitacion.Text = "";
			costoHabitacion.Text = "";
		}

		private void EliminarItemsDropList(DropDownList droplist)
		{
			int contadoritems = 0;

			while ((contadoritems = droplist.Items.Count) > 1)
			{
				droplist.Items.Remove(droplist.Items[contadoritems - 1]);
				contadoritems--;
			}

		}

		private void ActualizarCBHidden(int _hotel)
		{
			LogicaPropiedades _habitaciones = new LogicaPropiedades();
			CBnumHabsHidden.DataSource = _habitaciones.GetHabitaciones(_hotel);
			CBnumHabsHidden.DataBind();
		}

		protected void CBnumHabsHidden_Init(object sender, EventArgs e)
		{
			Session["Hotel"] = 1;
			LogicaPropiedades _habitaciones = new LogicaPropiedades();
			int _var = Convert.ToInt32(Session["Hotel"]);
			CBnumHabsHidden.DataSource = _habitaciones.GetHabitaciones(_var);
			CBnumHabsHidden.DataBind();
		}

		private Boolean ValidarNumHabNoRepetido(string _numHab)
		{
			int _contador = CBnumHabsHidden.Items.Count - 1;
			while (_contador > 0)
			{
				CBnumHabsHidden.SelectedIndex = _contador;
				if (CBnumHabsHidden.SelectedValue == (Convert.ToInt32(_numHab)).ToString())
				{
					ActualizarCBHidden((int)Session["Hotel"]);
					return false;
				}
				_contador--;
			}

			return true;
		}

		protected void AgregarPisoNuevo_Click(object sender, EventArgs e)
		{
			LogicaPropiedades _validarPiso = new LogicaPropiedades();
			if (!_validarPiso.ValidarPisosHotel(TBpiso.Text, Session["Hotel"].ToString()))
			{
				_validarPiso.InsertPisoNuevo(TBpiso.Text, Session["Hotel"].ToString());
			}
			else
			{
				string _alerta = "alert('No puede crear un piso existente')";
				ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "AlertScript",_alerta, true);
			}
		}

		private Boolean ValidarPisoNoMayorUltimoCreado(string _piso)
		{
			int totalPisos = CBnumHabsHidden.Items.Count - 1;

			if (Convert.ToInt32(TBpiso.Text) == totalPisos || Convert.ToInt32(TBpiso.Text) < totalPisos || (Convert.ToInt32(TBpiso.Text) - 1) != totalPisos)
			{
				return false;
			}

			return true;
		}

	}
}